<?php
/**
 * @date        <!-- phpDesigner :: Timestamp [07-07-2010 17:15:49] -->
 * @filesource  class.mysql.php
 * @package     WebCms
 * @copyright	Copyright (C) 2010
 * @author      Sérgio 'Horizak' Alves
 */

// Sem acesso directo
defined('_WEXEC') or die('Restricted access');

/**
 * MySql class
 *
 */
class MySql {
  private $connect;

  /**
   * Função construtora
   * 
   */
  function __construct() {
    require (CFG_P.'configuration.mysql.php');
    $this->host = $sql['host'] ? $sql['host'] : 'localhost';
    $this->charset = isset($sql['charset']) ? $sql['charset'] : 'utf8';
    $this->formatLog = isset($sql['formatLog']) ? $sql['formatLog'] : 'string';
    $this->debug = isset($sql['debug']) ? $sql['debug'] : null;
    $this->functionDebug = isset($sql['functionDebug']) ? $sql['functionDebug'] : null;

    $this->connect = mysql_connect($sql['host'],$sql['user'],$sql['pass']);
    if ($this->debug) {
      if ($this->connect) $this->writeLog("Connected with server: {$sql['host']}");
      else {
        $this->writeLog("Unable to connect with server: {$sql['host']}",true);
        return false;
      }
    }

    $this->charsetOK = mysql_set_charset($this->charset);
    if ($this->debug) {
      if ($this->charsetOK) $this->writeLog("Set charset to: {$this->charset}");
      else  $this->writeLog("Unable to set charset to: {$this->charset}",true);
    }


    $this->selectDB = mysql_select_db($sql['db']);
    if ($this->debug)
      if ($this->selectDB) $this->writeLog("Selected database: {$sql['db']}");
      else  $this->writeLog("Unable to select database: {$sql['db']}",true);
  }

  /**
   * Desligar servidor mysql
   * 
   * @var           array $params - parâmetros opcionais
   */
  function disconnect($params = array()) {
    $this->disconnect = mysql_close($this->connect);
    if ($this->debug)
      if ($this->disconnect) $this->writeLog("Server disconect: {$this->host}");
      else  $this->writeLog("Unable disconnect server: {$this->host}",true);
  }

  /**
   * Correr comando sql
   *
   * @var           string $sql - comando sql
   * @var           string $result - nome do resultado | definido = result
   * @var           array $params - parâmetros opcionais
   */
  function sql($sql,$result = 'result',$params = array()) {
    unset($this->$result);
    unset($this->total);
    $this->sql = $sql;

    $this->$result = mysql_query($this->sql);
    if ($this->debug)
      if ($this->$result) {
        $this->writeLog("Run query: {$this->sql}");
        return true;
      } else {
        $this->writeLog("Unable to run query: {$this->sql}",true);
        return false;
      }
  }

  /**
   * Total de linhas da consulta
   * 
   * @var           string $result - nome do resultado | definido = result
   * @var           array $params - parâmetros opcionais
   * @return        int
   */
  function total($result = 'result',$params = array()) {
    $this->total = mysql_num_rows($this->$result);
    if (isset($this->debug)) $this->writeLog("Total: {$this->total} query: {$this->sql}");
    return $this->total;
  }

  /**
   * Retornar total de registos da consulta
   *
   * @var           string $sql - comando sql
   * @var           string $result - nome do resultado | definido = result
   * @var           array $params - parâmetros opcionais
   * @return        int
   */
  function getTotal($sql,$result = 'result',$params = array()) {
    $this->sql = $sql;

    if ($this->sql) $this->sql($this->sql,$result);

    return $this->total($result);
  }

  /**
   * Optimizar tabelas da base dados
   *
   * @var           string/array $tbl - tabela(s) para optimizar
   * @var           array $params - parâmetros opcionais
   */
  function optimize($tbl,$params = array()) {
    if (is_array($tbl)) {
      foreach ($tbl as $value) $this->sql("OPTIMIZE TABLE {$value}",'optimize');
    } elseif ($tbl) $this->sql("OPTIMIZE TABLE {$table}",'optimize');
    else {
      $this->sql("SHOW TABLES",'optimizes');
      while ($row = mysql_fetch_array($this->optimizes)) $this->sql("OPTIMIZE TABLE {$row[0]}",'optimize');
    }
  }

  /**
   * Escrever log
   * 
   * @var           string $value - texto com o erro
   * @var           boolean $err - log de erro ou normal
   * @var           array $params - parâmetros opcionais
   */
  function writeLog($value,$err = false,$params = array()) {
    $log = cms_date('log')." - ".$value;
    if ($err) {
      $log .= '<br>Error nº '.mysql_errno();
      $log .= '<br>Error '.mysql_error();
    }

    $this->log[] = $log;

    if ($this->debug == true) {
      $func = $this->functionDebug;
      $func(101,$log);
    }
  }

  /**
   * Retornar log
   * 
   * @var           boolean $show - mostra ou retorna o log | definido = false
   * @var           array $params - parâmetros opcionais
   * @param boolean $show
   * @param string $formatlog | definido = string
   * @return array/string
   */
  function getLog($show = false,$params = array()) {
    if ($show) {
      $formatlog = $params['formatlog'] ? $params['formatlog'] : $this->formatlog;
      if ($formatlog == 'array') {
        echo '<pre>';
        print_r($this->log);
        echo '</pre>';
      } elseif ($this->formatlog == 'string') {
        foreach ($this->log as $value) echo $value.'<br />';
      }
    } else  return $this->log;
  }
}
?>